Eager Loading হলো একটি কৌশল যা Entity Framework (EF) এর মধ্যে সম্পর্কিত ডেটা লোড করার সময় একসাথে সমস্ত সম্পর্কিত ডেটা লোড করে। এটি পারফরম্যান্স বৃদ্ধি করতে সহায়ক হতে পারে কারণ এতে একাধিক ডেটাবেস রাউন্ড-ট্রিপ কমিয়ে আনা যায় এবং একটি মাত্র কুয়েরি দ্বারা সমস্ত প্রয়োজনীয় ডেটা একসাথে রিট্রাইভ করা হয়।
এটা Lazy Loading এবং Explicit Loading এর বিপরীতে কাজ করে, যেখানে Lazy Loading কেবল তখনই সম্পর্কিত ডেটা লোড করে যখন এটি প্রয়োজন হয় এবং Explicit Loading সম্পর্কিত ডেটা ম্যানুয়ালি লোড করতে হয়।
EF Core তে Eager Loading কনফিগার করার জন্য Include() মেথড ব্যবহার করা হয়। এটি আপনাকে সম্পর্কিত ডেটার সাথে Join করে একসাথে ডেটা লোড করতে সক্ষম করে।
ধরা যাক, আপনার কাছে Customer
এবং Order
দুটি Entity রয়েছে, যেখানে One-to-Many সম্পর্ক আছে (একটি Customer
এর একাধিক Order
থাকতে পারে)। এখন আপনি Eager Loading ব্যবহার করে Customer
এর সাথে সম্পর্কিত সমস্ত Order
ডেটা একসাথে লোড করতে চান।
public class Customer
{
public int CustomerId { get; set; }
public string Name { get; set; }
public ICollection<Order> Orders { get; set; }
}
public class Order
{
public int OrderId { get; set; }
public string OrderDetails { get; set; }
public int CustomerId { get; set; }
public Customer Customer { get; set; }
}
var customers = dbContext.Customers
.Include(c => c.Orders) // Eager Loading
.ToList();
এখানে, Include(c => c.Orders)
মেথডটি Customer
Entity এর সাথে সম্পর্কিত সমস্ত Order
ডেটা একসাথে লোড করে। ফলে, একবারের কুয়েরি দিয়েই সমস্ত Customer
এবং তাদের Orders
ডেটা লোড হয়ে যাবে।
EF Core তে আপনি একাধিক সম্পর্ক একসাথে লোড করতে পারেন। যেমন, যদি Order
Entity এর সাথে আরেকটি সম্পর্ক OrderDetails
থাকে, তবে আপনি এই সম্পর্কটি Include এর মাধ্যমে একসাথে লোড করতে পারবেন।
var customers = dbContext.Customers
.Include(c => c.Orders) // Orders লোড করা
.ThenInclude(o => o.OrderDetails) // OrderDetails লোড করা
.ToList();
এখানে, ThenInclude
মেথডটি প্রথমে Orders
এর পর OrderDetails
লোড করতে সাহায্য করছে। এর মাধ্যমে আপনি চেইনিং এর মাধ্যমে সম্পর্কিত অনেক গুলি Entity একসাথে লোড করতে পারবেন।
প্রয়োজনীয় ডেটাই লোড করুন: যেকোনো সম্পর্কিত ডেটা লোড করার আগে নিশ্চিত করুন যে আপনি শুধুমাত্র প্রয়োজনীয় ডেটাই লোড করছেন। অতিরিক্ত ডেটা লোড করা পারফরম্যান্সে প্রভাব ফেলতে পারে।
উদাহরণ:
var customers = dbContext.Customers
.Include(c => c.Orders)
.Where(c => c.Name.StartsWith("A"))
.ToList();
No Tracking Queries: যদি আপনি কেবল ডেটা রিট্রাইভ করতে চান এবং কোন আপডেট করতে না চান, তাহলে AsNoTracking() মেথড ব্যবহার করা উচিত। এটি EF কে জানায় যে, ডেটাটি ট্র্যাক না করতে, ফলে পারফরম্যান্সে উন্নতি হয়।
উদাহরণ:
var customers = dbContext.Customers
.Include(c => c.Orders)
.AsNoTracking()
.ToList();
বিষয় | Eager Loading | Lazy Loading |
---|---|---|
কিভাবে কাজ করে | একসাথে সমস্ত সম্পর্কিত ডেটা লোড করে। | ডেটা লোড করার সময় সম্পর্কিত ডেটা কেবল তখন লোড হয় যখন এটি প্রয়োজন হয়। |
পারফরম্যান্স | সাধারণত ভালো, কারণ একাধিক কুয়েরি কমে যায়। | N+1 সমস্যা তৈরি করতে পারে এবং অতিরিক্ত রাউন্ড-ট্রিপ হতে পারে। |
ব্যবহারযোগ্যতা | একাধিক সম্পর্ক একসাথে লোড করতে সুবিধাজনক। | ব্যবহারকারীকে সম্পর্কিত ডেটার প্রাপ্যতা কন্ট্রোল করতে দেয়। |
Eager Loading ব্যবহার করলে, একাধিক সম্পর্কের ডেটা একসাথে লোড করার কারণে ডেটাবেস থেকে কম রাউন্ড-ট্রিপ করতে হয়, ফলে অ্যাপ্লিকেশনের পারফরম্যান্স বাড়ে। তবে, যদি আপনি খুব বড় বা জটিল সম্পর্কের ডেটা লোড করেন, তাহলে মেমরি ব্যবহার বেড়ে যেতে পারে। তাই, যথাযথভাবে ডেটা লোড করা গুরুত্বপূর্ণ।
common.read_more